]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
appDisplay: Allow clicks/long presses through touch events
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 22 Jul 2014 10:40:54 +0000 (12:40 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 24 Jul 2014 16:15:02 +0000 (18:15 +0200)
The long press code has been refactored so it can be used on both pointer and
touch events, and the click gesture has been made to account for button=0.

https://bugzilla.gnome.org/show_bug.cgi?id=733633

js/ui/appDisplay.js

index a707c67fcc8273d34b9131ea41f193599815db2c..524635c94c4ac15459d803047dac6e644c16d3bd 100644 (file)
@@ -1382,7 +1382,9 @@ const AppIcon = new Lang.Class({
 
         this.actor.label_actor = this.icon.label;
 
+        this.actor.connect('leave-event', Lang.bind(this, this._onLeaveEvent));
         this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
+        this.actor.connect('touch-event', Lang.bind(this, this._onTouchEvent));
         this.actor.connect('clicked', Lang.bind(this, this._onClicked));
         this.actor.connect('popup-menu', Lang.bind(this, this._onKeyboardPopupMenu));
 
@@ -1438,17 +1440,26 @@ const AppIcon = new Lang.Class({
             this.actor.remove_style_class_name('running');
     },
 
+    _setPopupTimeout: function() {
+        this._removeMenuTimeout();
+        this._menuTimeoutId = Mainloop.timeout_add(MENU_POPUP_TIMEOUT,
+            Lang.bind(this, function() {
+                this._menuTimeoutId = 0;
+                this.popupMenu();
+                return GLib.SOURCE_REMOVE;
+            }));
+        GLib.Source.set_name_by_id(this._menuTimeoutId, '[gnome-shell] this.popupMenu');
+    },
+
+    _onLeaveEvent: function(actor, event) {
+        this.actor.fake_release();
+        this._removeMenuTimeout();
+    },
+
     _onButtonPress: function(actor, event) {
         let button = event.get_button();
         if (button == 1) {
-            this._removeMenuTimeout();
-            this._menuTimeoutId = Mainloop.timeout_add(MENU_POPUP_TIMEOUT,
-                Lang.bind(this, function() {
-                    this._menuTimeoutId = 0;
-                    this.popupMenu();
-                    return GLib.SOURCE_REMOVE;
-                }));
-            GLib.Source.set_name_by_id(this._menuTimeoutId, '[gnome-shell] this.popupMenu');
+            this._setPopupTimeout();
         } else if (button == 3) {
             this.popupMenu();
             return Clutter.EVENT_STOP;
@@ -1456,10 +1467,17 @@ const AppIcon = new Lang.Class({
         return Clutter.EVENT_PROPAGATE;
     },
 
+    _onTouchEvent: function (actor, event) {
+        if (event.type() == Clutter.EventType.TOUCH_BEGIN)
+            this._setPopupTimeout();
+
+        return Clutter.EVENT_PROPAGATE;
+    },
+
     _onClicked: function(actor, button) {
         this._removeMenuTimeout();
 
-        if (button == 1) {
+        if (button == 0 || button == 1) {
             this._onActivate(Clutter.get_current_event());
         } else if (button == 2) {
             this.app.open_new_window(-1);